#变量是用于在内存中存储数据的命名位置。可以将变量视为保存数据的容器，这些数据可以在后面程序中进行更改。
number = 10
#在这里，我们创建了一个名为number的变量。我们已将值 10 分配给变量 number。
number = 10
number = 1.1
#最初，它等于10。后来，它被更改为1.1。
#注意：在Python中，我们实际上并未为变量分配值。相反，Python将对象（值）的引用提供给变量。
#可以使用赋值运算符 = 为变量赋值。
website = "apple.com"
print(website)
#在以上程序中，我们为变量website分配了一个值 apple.com 。然后，我们打印出分配给website的值，即 apple.com
#注意：Python是一种类型推断语言，因此您不必显式定义变量类型。它会自动知道这 apple.com 是一个字符串，并将website变量声明为字符串。
# 为website变量赋新值 
website = "(cainiaojc.com)"
print(website)
a, b, c = 5, 3.2, "Hello"
print (a)
print (b)
print (c)
#如果我们想一次将相同的值分配给多个变量，我们可以这样做：
x = y = z = "same"
print (x)
print (y)
print (z)
#常量
#常量也是一种变量，只是其值一旦赋予后无法更改。可以将常量视为保存了以后无法更改的信息的容器

import constant
print(constant.PI)
print(constant.GRAVITY)
#注意：实际上，我们不在Python中使用常量。用大写字母命名它们是一种将其与普通变量分开的一种约定，但是，实际上并不能阻止重新分配。

#变量和常量的规则和命名约定
#常量和变量名称应由小写字母（a 到 z）或大写字母（A 到 Z）或数字（0 到 9）或下划线（_）组成。
#创建一个有意义的名称。例如， vowel 比v更有意义
#如果要创建具有两个单词的变量名，请使用下划线将它们分开。
#使用可能的大写字母声明一个常量。
#切勿使用！，@，#，$，％等特殊符号
#不要用数字开头的变量名。

#字面量
#字面量是以变量或常量给出的原始数据。
#数字字面量
#数字字面量是不可变的（不可更改）。数字字面量可以属于3种不同的数值类型：Integer，Float 和 Complex。
a = 0b1010 #二进制字面量
b = 100 #十进制字面量
c = 0o310 #八进制字面量
d = 0x12c #十六进制字面量

#Float 字面量
float_1 = 10.5 
float_2 = 1.5e2

#Complex 字面量
x = 3.14j

print(a, b, c, d)
print(float_1, float_2)
print(x, x.imag, x.real)

"""在上面的程序中
我们将整数字面量分配给不同的变量。在这里，a是二进制字面量，b是十进制字面量，c是八进制字面量，d是十六进制字面量。
当我们打印变量时，所有字面量 都将转换为 十进制值。
10.5 和 1.5e2 是浮点字面量。1.5e2 用指数表示，等于 1.5 * 102。
我们为变量x分配了一个复数字面量 3.14j 。然后，我们使用虚数字面量(x.imag) 和 实数字面量(x.real)来创建复数的虚部和实部。"""

#字符串字面量
#字符串字面量是由引号括起来的一系列字符。我们可以对字符串使用单引号，双引号 或 三引号。并且，字符字面量是用单引号或双引号引起来的单个字符。
strings = "This is Python"
char = "C"
multiline_str = """This is a multiline string with more than one line code."""
unicode = u"\u00dcnic\u00f6de"
raw_str = r"raw \n string"

print(strings)
print(char)
print(multiline_str)
print(unicode)
print(raw_str)

"""在上述程序中，This is Python 是字符串字面量 和 C 是char字符字面量。在multiline_str中分配的带有三引号的值是多行字符串字面量。
而 u"\u00dcnic\u00f6de" 是一个Unicode文本支持英语以外的字符，r"raw \n string" 是原始字符串字面量。"""

#布尔字面量
x = (1 == True)
y = (1 == False)
a = True + 4
b = False + 10

print("x is", x)
print("y is", y)
print("a:", a)
print("b:", b)

"""在上面的程序中，我们使用了布尔字面量 True 和 False。在Python中，True 表示值为1,False 表示值为0。
x的值为真，因为1 等于 True。y 的值为 False，因为1 不等于 False。类似地，我们可以使用数值表达式中的 True 和 False 作为值。
a 的值是 5，因为我们加上True，它的值是 1 加 4。类似地，b 等于 10，因为我们把 0 和 10 相加。"""


#特殊字面量
drink = "Available"
food = None

def menu(x):
    if x == drink:
        print(drink)
    else:
        print(food)

menu(drink)
menu(food)
#在上面的程序中，我们定义了一个 menu 函数。在 menu 内部，当我们将参数设置为 drink 时，它将显示 Available。并且，当参数为时 food，将显示 None。

#字面量集
#有四种不同的字面量集合：列表字面量，元组字面量，字典字面量 和 集合字面量。
fruits = ["apple", "mango", "orange"] #列表
numbers = (1, 2, 3) #元组
alphabets = {'a':'apple', 'b':'ball', 'c':'cat'} #字典
vowels = {'a', 'e', 'i' , 'o', 'u'} #集合

print(fruits)
print(numbers)
print(alphabets)
print(vowels)
